package judesart.app.client.controller;

import java.util.List;

import judesart.app.domain.Exhibition;
import judesart.app.domain.ExhibitionVideo;
import judesart.app.shared.ArtworkShort;
import judesart.app.shared.SearchResult;
import judesart.app.shared.UploadToken;
import com.google.gwt.user.client.rpc.AsyncCallback;

public interface ExhibitionControllerAsync {
    void getExhibition(Long exhibitionId, AsyncCallback<Exhibition> callback);

    void searchExhibitions(int startAt, int maxElements, AsyncCallback<SearchResult<Exhibition>> callback);

    void createExhibition(Exhibition exhibition, AsyncCallback<Exhibition> callback);

    void updateExhibition(Exhibition exhibition, AsyncCallback<Exhibition> callback);

    void deleteExhibition(Long exhibitionId, AsyncCallback<Void> callback);

    void findPhotoKeyByImageId(Long imageId, AsyncCallback<String> callback);

    void getVideoUploadFormToken(Long exhibitionId, AsyncCallback<UploadToken> callback);

    void addYoutubeVideoById(Long exhibitionId, String videoId, AsyncCallback<ExhibitionVideo> callback);

    void findExhibitionArtworks(Long exhibitionId, AsyncCallback<List<ArtworkShort>> callback);

    void addArtworkToExhibition(Long exhibitionId, Long artworkId, AsyncCallback<Void> callback);

    void deleteArtworkFromExhibition(Long exhibitionId, Long artworkId, AsyncCallback<Void> callback);

    void findAllUserExhibitions(Long userId, AsyncCallback<List<Exhibition>> callback);
}
